#include <stdio.h>
#include <stdlib.h>

/**
 * 顺序表实现栈
 */
typedef struct Stack{
    int * arr;
    int capacity;
    // 表示栈顶位置
    int top;
} * StackArr;

/**
 * 初始化栈
 * @param stack
 */
void initStackArr(StackArr stack){
    // 分配内存
    stack->arr = malloc(sizeof (StackArr) * 10);
    stack->capacity = 10;
    // 栈为空时，默认为-1
    stack->top = -1;
}

/**
 * 入栈
 */
_Bool push(StackArr stack, int data) {
    // 满栈，需扩容
    if(stack->top == stack->capacity - 1) {
        int newCapacity = stack->capacity + (stack->capacity>>1);
        int * newArr = realloc(stack, sizeof(StackArr) * newCapacity);
        stack->arr = newArr;
        stack->capacity = newCapacity;
    }
    stack->arr[++stack->top] = data;
    return 1;
}

/**
 * 出栈
 */
int pop(StackArr stack) {
    // 栈为空
    if(stack->top == -1) {
        return INT_MAX;
    }
    return stack->arr[stack->top--];
}

void printStack(StackArr stack) {
    while(stack->top != -1) {
        printf("%d\t", pop(stack));
    }
}


int main4() {
    struct Stack stack;
    initStackArr(&stack);
    push(&stack, 10);
    push(&stack, 20);
    push(&stack, 30);
    printStack(&stack);
}